//////////////////////////////////////////////////////////////////////////////////
//                                                                              //
//  This file is part of the buola project (https://code.google.com/p/buola/).  //
//                                                                              //
//  Copyright(c) 2007-2012 Xavi Gratal                                          //
//  gratal AT gmail DOT com                                                     //
//                                                                              //
//  Buola is free software: you can redistribute it and/or modify               //
//  it under the terms of the GNU General Public License as published by        //
//  the Free Software Foundation, either version 3 of the License, or           //
//  (at your option) any later version.                                         //
//                                                                              //
//  Buola is distributed in the hope that it will be useful,                    //
//  but WITHOUT ANY WARRANTY; without even the implied warranty of              //
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               //
//  GNU General Public License for more details.                                //
//                                                                              //
//  You should have received a copy of the GNU General Public License           //
//  along with buola.  If not, see <http://www.gnu.org/licenses/>.              //
//                                                                              //
//////////////////////////////////////////////////////////////////////////////////

#include <buola/image/cimagegc.h>

namespace buola { namespace img { namespace detail {

CImageGCBase::CImageGCBase(const CSize_d &pSize)
    :   mSize(pSize)
{
    
}

void CImageGCBase::DoFill()
{
    CScanlineRasterizer<> lRasterizer;
    lRasterizer.ClipBox(0,0,mSize.x,mSize.y);
    Path().InterpretFlat(lRasterizer);

//    img::CScanline_p8 lScanline;

//    img::render_scanlines_aa_solid(lRasterizer,lScanline,lImage,img::pixel(130,237,170));
    lRasterizer.RewindScanlines();
    DoRender(lRasterizer);
}

void CImageGCBase::DoStroke()
{
    CScanlineRasterizer<> lRasterizer;
    lRasterizer.ClipBox(0,0,mSize.x,mSize.y);
    img::CStroker<CScanlineRasterizer<>> lStroker(mStroke,mTransform,0.1,lRasterizer);
    lStroker.Stroke(Path());

//    img::CScanline_p8 lScanline;

//    img::render_scanlines_aa_solid(lRasterizer,lScanline,lImage,img::pixel(130,237,170));
    lRasterizer.RewindScanlines();
    DoRender(lRasterizer);
}

void CImageGCBase::DoClip()
{
    img::CScanlineRasterizer<> lRasterizer;
    lRasterizer.ClipBox(0,0,mSize.x,mSize.y);
    Path().InterpretFlat(lRasterizer);

    lRasterizer.RewindScanlines();
    lRasterizer.RenderToScanlines(mClipArea);
    
    mClipArea.Print();
    mClip=true;
}

void CImageGCBase::DoResetClip()
{
    mClip=false;
}

/*namespace detail*/ } /*namespace img*/ } /*namespace buola*/ }
